﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace JudoTec.cls
{
    public class Competicion
    {
        private int iD_Competicion;
        private string nombre;
        private int edad_Min;
        private int edad_Max;
        private double peso_Min;
        private double peso_Max;
        private string sexo;
        private bool activo;
        private bool participantes_Completos;
        private bool combates_Completos;

        //METODOS CONSTRUCTORES
        public Competicion() {
            this.iD_Competicion = -1;
            this.nombre = "";
            this.edad_Min = 0;
            this.edad_Max = 0;
            this.peso_Min = 0;
            this.peso_Max = 0;
            this.sexo = "v";
            this.activo = false;
            this.participantes_Completos = false;
            this.combates_Completos = false;
        }

        public Competicion( int idcompeticion, string nombre,int edadmin,int edadmax,double pesomin,double pesomax,string sexo, bool activo, bool participantes_completos, bool combates_completos){
            this.iD_Competicion=idcompeticion;
            this.nombre = nombre;
            this.edad_Min=edadmin;
            this.edad_Max=edadmax;
            this.peso_Min= pesomin;
            this.peso_Max=pesomax;
            this.sexo = sexo;
            this.activo = activo;
            this.participantes_Completos = participantes_completos;
            this.combates_Completos = combates_completos;
        }

        // Metodo que me inserta una competicion en la BD
        public void InsertarCompeticion()
        {
            try
            {
                string consulta = "INSERT INTO competiciones (Nombre, Edad_Min, Edad_Max, Peso_Min, Peso_Max, Sexo, Activo, Participantes_Completos, Combates_Completos) " +
                                  "VALUES (@nombre, @edadmin, @edadmax, @pesomin, @pesomax, @sexo, @activo, @participantes_completos, @combates_completos)";

                MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
                MySqlCommand comando = new MySqlCommand(consulta, conexion);

                //Asigno los parametros
                comando.Parameters.AddWithValue("@nombre", this.nombre);
                comando.Parameters.AddWithValue("@edadmin", this.edad_Max);
                comando.Parameters.AddWithValue("@edadmax", this.edad_Min);
                comando.Parameters.AddWithValue("@pesomin", this.peso_Max);
                comando.Parameters.AddWithValue("@pesomax", this.peso_Min);
                comando.Parameters.AddWithValue("@sexo", this.sexo);
                comando.Parameters.AddWithValue("@activo", this.activo);
                comando.Parameters.AddWithValue("@participantes_completos", this.participantes_Completos);
                comando.Parameters.AddWithValue("@combates_completos", this.combates_Completos);

                comando.ExecuteNonQuery();

                conexion.Close();

                MessageBox.Show("Competicion Añadido con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al añadir la competicion", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }

        // Metodo que me modifica una competicion en la BD
        public void ModificarCompeticion()
        {
            try
            {
                string consulta = "UPDATE competiciones SET  Id_Competicion = @idcompeticion, Nombre= @nombre, Edad_Min= @edadmin, Edad_Max= @edadmax, Peso_Min= @pesomin, Peso_Max=@pesomax, " +
                           "Sexo= @sexo, Activo= @activo, Participantes_Completos= @participantes_completos, Combates_Completos = @combates_completos WHERE Id_competicion=" + this.iD_Competicion;

                MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
                MySqlCommand comando = new MySqlCommand(consulta, conexion);

                //Asigno los parametros
                comando.Parameters.AddWithValue("@idcompeticion", this.iD_Competicion);
                comando.Parameters.AddWithValue("@nombre", this.nombre);
                comando.Parameters.AddWithValue("@edadmin", this.edad_Max);
                comando.Parameters.AddWithValue("@edadmax", this.edad_Min);
                comando.Parameters.AddWithValue("@pesomin", this.peso_Max);
                comando.Parameters.AddWithValue("@pesomax", this.peso_Min);
                comando.Parameters.AddWithValue("@sexo", this.sexo);
                comando.Parameters.AddWithValue("@activo", this.activo);
                comando.Parameters.AddWithValue("@participantes_completos", this.participantes_Completos);
                comando.Parameters.AddWithValue("@combates_completos", this.combates_Completos);

                comando.ExecuteNonQuery();

                conexion.Close();
                MessageBox.Show("Competición Modificada con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al Modificar la Competición", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }

        }


        // Metodo que me elimina a una Competicion de la BD
        public void EliminarCompeticion()
        {
            try
            {
                string consulta = "DELETE FROM competiciones WHERE Id_competicion=" + this.iD_Competicion;

                MySqlConnection conexion = cls.ConexionMySQL.IniciarConexion();
                MySqlCommand comando = new MySqlCommand(consulta, conexion);

                comando.ExecuteNonQuery();

                conexion.Close();
                MessageBox.Show("Competición Eliminada con Exito", "Mensaje Informativo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (MySqlException)
            {
                MessageBox.Show("Ocurrio un error al Eliminar la Competición", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }


        //METODOS DE ACCESO A LAS VARIABLES
        public int ID_Competicion
        {
            get { return iD_Competicion; }
            set { iD_Competicion = value; }
        }

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public int Edad_Min
        {
            get { return edad_Min; }
            set { edad_Min = value; }
        }

        public int Edad_Max
        {
            get { return edad_Max; }
            set { edad_Max = value; }
        }

        public double Peso_Min
        {
            get { return peso_Min; }
            set { peso_Min = value; }
        }

        public double Peso_Max
        {
            get { return peso_Max; }
            set { peso_Max = value; }
        }

        public string Sexo
        {
            get { return sexo; }
            set { sexo = value; }
        }

        public bool Activo
        {
            get { return activo; }
            set { activo = value; }
        }

        public bool Participantes_Completos
        {
            get { return participantes_Completos; }
            set { participantes_Completos = value; }
        }


        public bool Combates_Completos
        {
            get { return combates_Completos; }
            set { combates_Completos = value; }
        }

        //Sobrecargamos equals
        public override bool Equals(object obj)
        {
            //Si el parametro es nulo devuelvo false
            if (obj == null)
            {
                return false;
            }
            //Si al hacerle un cast da nulo devuelvo false
            Competicion c = obj as Competicion;
            if (c == null)
            {
                return false;
            }

            //Si todos los campos son igual devuelvo true
            if (this.iD_Competicion == c.iD_Competicion)
            {
                return true;
            }
            return false;
        }
    }
}
